package com.lagou.session;

import com.lagou.handler.ResultSetHandler;
import com.lagou.pojo.Configuration;
import com.lagou.pojo.MappedStatement;
import com.lagou.transaction.Transaction;

import java.sql.SQLException;
import java.util.List;

public interface Executor {

    /**
     * 查询方法
     * @param configuration 核心配置类
     * @param resultHandler 结果处理器
     * @param mappedStatement sql封装类
     * @param parameter 参数
     * @param <E> 返回对象
     * @return
     * @throws Exception
     */
    <E> List<E> query(Configuration configuration, ResultSetHandler resultHandler, MappedStatement mappedStatement, Object parameter) throws Exception;

    /**
     * 更新方法
     * @param configuration 核心配置对象
     * @param mappedStatement sql封装类
     * @param parameter 参数
     * @return 更新成功的条数
     * @throws SQLException
     */
    int update(Configuration configuration, MappedStatement mappedStatement, Object parameter) throws Exception;

    /**
     * 提交事务
     * @param required 是否要提交事务
     * @throws SQLException
     */
    void commit(boolean required) throws Exception;

    /**
     * 事务回滚
     * @param required 是否要回滚
     * @throws SQLException
     */
    void rollback(boolean required) throws Exception;

    /**
     * 关闭
     * @param forceRollback
     */
    void close(boolean forceRollback);


    Transaction getTransaction();
}
